"""
@Author  : 康帅
@Time    : 2021/4/14 15:46
@Function: 多线程版本:耗时6s多
"""

import time
import threading

"""
t1 = threading.Thread(target=你写的函数名,args=(传入变量(如果只有一个变量就必须在后加上逗号),),name=随便取一个线程名)：
把一个线程实例化给t1，这个线程负责执行target=你写的函数名
t1.start()：负责执行启动这个线程
t1.join():必须要等待你的子线程执行完成后再执行主线程
t1.setDeamon(True):当你的主线程执行完毕后，不管子线程有没有执行完成都退出主程序，注意不能和t1.join()一起使用。
threading.current_thread().name:打印出线程名
"""


def mop_floor():
    print('我要拖地了')
    time.sleep(1)
    print('拖完地了')


def heat_up_water():
    print('我要烧水了')
    time.sleep(6)
    print('水开了')


start_time = time.time()
t1 = threading.Thread(target=heat_up_water)
t2 = threading.Thread(target=mop_floor)
t1.start()
t2.start()
t1.join()
t2.join()
end_time = time.time()
print(f'总耗时:{end_time - start_time}')


"""
可以看到烧水等待的时候直接执行拖地任务，并且总共耗时为6秒，关于这里的start和jion都是固定的操作套路，
记住这两个代词以后直接套用即可，需要注意的是多线程程序的执行顺序是不确定的。当执行到sleep语句时，线程将被阻塞（Blocked），
到sleep结束后，线程进入就绪（Runnable）状态，等待调度的命令执行另一个子线程，线程调度将自行选择一个线程执行
"""